package day09;

import java.util.Arrays;

/**
 * 	顺序结构手动实现集合
 * @author Administrator
 * 	底层就是数组
 *	集合：为了后续开发使用 MyArrayList
 *
 */
public class MyArrayList {
	//	用来存储数据的数组 - 并且初始长度是10
	private Object[] arr = new Object[10];
	private int size = 0;

	/**
	 *	向集合(this)中添加元素
	 *	向arr中添加元素
	 */
	public void add(Object obj) {
		//	扩容的条件 - 数组满了
		if(size ==arr.length){
			Arrays.copyOf(arr, arr.length * 2);
			}
		//	在下标位置填入元素
		arr[size] = obj;
		//	下标后移一位
		size++;
	}
	
	/**	向集合index的位置中插入obj元素*/
	public void add(int index,Object obj) {
		if(index>size || index <0) {
			return;
		}
		if(size ==arr.length){
			Arrays.copyOf(arr, arr.length * 2);
			}
		//	将index后面的所有元素后移一位
		for(int i = size-1;i>=index;i--) {
			arr[i+1] = arr[i];
		}
		arr[index] = obj;
		size++;
	}
	
	/**	获得集合的元素个数*/
	public int size() {
		return size;
	}
	
	/**	从集合中获得指定位置(index)的元素*/
	public Object get(int index) {
		if(index>size || index <0) {
			return null;
		}else
		return arr[index];
	}
	
	/**	删除指定位置(index)上的元素，并且返回删除的元素*/
	public Object remove(int index) {
		if(index>size-1 || index <0) {
			return null;
		}
		Object obj = arr[index];
		for(int i = index+1; i < size; i++) {
			arr[i-1] = arr[i];
		}
		size--;
		return obj;
	}
	
	/**	删除第一个指定元素(obj)*/
	public void remove(Object obj) {
		for(int i = 0; i < size; i++) {
			if(arr[i].equals(obj)) {
				remove(i);
				break;
			}
		}
	}
	/**	替换指定位置上的元素，替换成obj，并且返回被替换的元素*/
	public Object set(int index,Object obj) {
		if(index>size-1||index<0) {
			return null;
		}
		Object o = arr[index];
		arr[index] = obj;
		return o;
	}
	/**	判断集合中是否存在指定元素obj*/
	public boolean contain(Object obj) {
		for(int i = 0; i< size; i++) {
			if(arr[i].equals(obj)) {
				return true;
			}
		}
		return false;
	}
	/**	判断集合是否为空：没有有效元素是空*/
	public boolean isEmpty() {
		if(size == 0) {
			return true;
		}
		return false;
	}
	/**	打印出项在集合中的有效元素*/
	public String toString() {
		StringBuilder sb = new StringBuilder("[");
		for(int i = 0; i < size; i++) {
			sb.append(arr[i] + ", ");
		}
		sb.append("]");
		return sb.toString();
	}
}
